#include <cstdio>
#include <algorithm>
using namespace std;
int n,m;
int u,v,w;
const int N=1e2+50;
const int INF=0x3f3f3f3f;
typedef long long ll;
ll g[N][N];
void floyd(){
    for(int k=1;k<=n;k++){
        for(int i=1;i<=n;i++){
            for(int j=1;j<=n;j++){
                if(g[i][j]>g[i][k]+g[k][j]){
                    g[i][j]=g[i][k]+g[k][j];
                }
            }
        }
    }
}
int main(void){
    scanf("%d%d",&n,&m);
    for(int i=1;i<=n;i++){
        for(int j=1;j<=n;j++){
            g[i][j]=i==j?0:INF;
        }
    }
    while(m--){
        scanf("%d%d%d",&u,&v,&w);
        if(w<g[u][v]){
            g[u][v]=g[v][u]=w;
        }
    }
    floyd();
    for(int i=1;i<=n;i++){
        for(int j=1;j<=n;j++){
            if(j!=1){
                printf(" ");
            }
            printf("%lld",g[i][j]);
        }
        printf("\n");
    }
    return 0;
}